
# -*- coding: utf-8 -*-

from django.db import models
from django.contrib.auth.models import User
from django.utils.encoding import force_unicode
from comunidadcyt.departamentos.models import Departamentos
from comunidadcyt.proyectos.models import Proyectos
from comunidadcyt.gruposDeInvestigacion.models import GruposDeInvestigacion as Grupos
from comunidadcyt.middleware import get_request
import unicodedata

AUTORES_CHOICES = (
                ('interno','Interno'),
                ('externo','Externo'),
               )
class Autores_de_publicaciones(models.Model):
    tipo = models.CharField(max_length=10,default = "interno",choices=AUTORES_CHOICES)
    autor_interno = models.ForeignKey(User,related_name="%(app_label)s_%(class)s_related",blank = True,null = True,verbose_name="* Autor interno",help_text='Autores de la Publicacion internos al sistema')
    autor_externo = models.CharField(max_length=200,blank = True,null = True,verbose_name="* Autor externo",help_text='Autores de la Publicacion externos al sistema')
    pos = models.IntegerField(blank = True,null = True)
    
    def __unicode__(self):
        if self.tipo == 'interno':
            if self.autor_interno.get_full_name() != "":
                return force_unicode(self.autor_interno.get_full_name())
            else:
                return force_unicode(self.autor_interno.username)
        else:
            return force_unicode(self.autor_externo)
    
    class Meta:
        ordering = ['pos']

PRIV_CHOICES = (
                ('sin_privacidad','Todo el mundo'),
                ('autores','Autores'),
                ('grupos','Grupos'),
                ('proyectos','Proyectos' ),
                ('departamentos','Departamentos'),
               )
class Publicaciones(models.Model):
    publicacion = models.CharField(max_length=200,verbose_name="* Título de la Publicación",help_text='Nombre de la Publicación')
    DOI = models.CharField(max_length=200,blank = True,null = True,help_text='Identificador de objeto digital') 
    sitio_web = models.URLField(max_length=300,blank = True,null = True,help_text='URL relacionado Publicación')
    video = models.TextField(blank = True,null = True,help_text='Video que quiera relacionar a la Publicación')
    pais = models.CharField(max_length=30,blank = True,null = True,verbose_name="País",help_text='País de publicación')
    ciudad = models.CharField(max_length=50,blank = True,null = True,help_text='Ciudad de publicación')
    direccion = models.CharField(max_length=200,blank = True,null = True,verbose_name="Dirección",help_text='Dirección de la entidad que realizó la Publicación')
    lugar = models.CharField(max_length=200,blank = True,null = True,help_text='Lugar donde fue realizada la publicación')
    autores = models.ManyToManyField(Autores_de_publicaciones,related_name="%(app_label)s_%(class)s_related",editable=False)
    departamentos = models.ManyToManyField(Departamentos,related_name="%(app_label)s_%(class)s_related",blank = True,null = True)
    proyectos = models.ManyToManyField(Proyectos,related_name="%(app_label)s_%(class)s_related",blank = True,null = True)
    grupos = models.ManyToManyField(Grupos,related_name="%(app_label)s_%(class)s_related",blank = True,null = True)
    privacidad = models.CharField(max_length=20,default = "sin_privacidad",choices=PRIV_CHOICES,verbose_name="Visibilidad")
    archivo = models.FileField(max_length=300,upload_to='media/Publicaciones', blank=True,editable=True,help_text='Algún archivo vinculado a la Publicación')
    imagen  = models.ImageField(max_length=300,upload_to = 'media/Publicaciones',blank=True,null=True, default = 'static/images/default.png')
    creado_por = models.CharField(max_length = 200,editable=False)
    tipo = models.CharField(max_length = 20,editable=False)
    
    def save(self, *args):
        self.creado_por = get_request().user.username
        super(Publicaciones, self).save()
        
    def __unicode__(self):
        return  force_unicode(self.publicacion)
    

class Revistas(Publicaciones):
    revista = models.CharField(max_length=200,verbose_name="* Revista",help_text='Título de la Revista')
    volumen = models.CharField(max_length=50,blank = True,null = True,help_text='Volúmenes de la Revista en la que se realizó la publicación')
    edicion = models.CharField(max_length=100,blank = True,null = True,verbose_name="Edición",help_text='Edición de la Revista en la que se realizó la publicación')
    ISBN = models.CharField(max_length=20,blank = True,null = True,help_text='ISBN de la Revista en la que se realizó la publicación')
    numero = models.CharField(max_length=100,blank = True,null = True,verbose_name="Número",help_text='Número de la Revista en la que se realizó la publicación')
    pagina = models.CharField(max_length=50,blank = True,null = True,verbose_name="Página",help_text='Números de página en los que se encuntra la publicación')
    capitulo = models.CharField(max_length=50,blank = True,null = True,verbose_name="Capítulo",help_text='Capítulos en los que se encuntra la publicación')
    anho = models.PositiveIntegerField(blank = True,null = True,verbose_name="Año",help_text='Año de publicación de la Revista')
    mes = models.CharField(max_length=20,blank = True,null = True,help_text='Mes de publicación de la Revista')
    
    def save(self):
        self.tipo = "revista"
        self.creado_por = get_request().user.username
        for field in self._meta.fields:
            if field.name == 'imagen':
                field.upload_to = 'media/Publicaciones/Revistas/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
            if field.name == 'archivo':
                field.upload_to = 'media/Publicaciones/Revistas/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
        super(Revistas, self).save()

    def getDate(self):
        if self.anho:
            if self.mes:
                return unicode(self.mes) + ' / ' + unicode(self.anho)
            else:
                return unicode(self.anho)
        return unicode('')
        
    def __unicode__(self):
        return  force_unicode(self.publicacion)
 
 
class Conferencias(Publicaciones):
    conferencia = models.CharField(max_length=200,verbose_name="* Conferencia",help_text='Título de la Conferencia')
    fecha = models.DateField(blank = True,null = True,help_text='Fecha de la Conferencia')
    tema = models.TextField(help_text='Temas tratados en la Conferencia', verbose_name="* Tema")
    edicion = models.CharField(max_length=100,blank = True,null = True,verbose_name="Edición",help_text='Número de Edición de la Conferencia')
    
    def save(self):
        self.tipo = "conferencia"
        self.creado_por = get_request().user.username
        for field in self._meta.fields:
            if field.name == 'imagen':
                field.upload_to = 'media/Publicaciones/Conferencias/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
            if field.name == 'archivo':
                field.upload_to = 'media/Publicaciones/Conferencias/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
        super(Conferencias, self).save()

    def getDate(self):
        if self.fecha:
            return unicode(self.fecha.strftime("%d/%m/%Y"))
        return unicode('')
        
    def __unicode__(self):
        return  force_unicode(self.publicacion)
 
class Libros(Publicaciones):
    libro = models.CharField(max_length=200,verbose_name="* Libro",help_text='Título del Libro')
    editorial = models.CharField(max_length=200,blank = True,null = True,help_text='Editorial del Libro')
    volumen = models.CharField(max_length=20,blank = True,null = True,help_text='Volumen del Libro')
    edicion = models.CharField(max_length=100,blank = True,null = True,verbose_name="Edición",help_text='Edición del Libro')
    ISBN = models.CharField(max_length=20,blank = True,null = True,help_text='ISBN del Libro')
    capitulo = models.CharField(max_length=50,blank = True,null = True,verbose_name="Capítulo",help_text='Cantidad de capítulos del Libro')    
    paginas = models.CharField(max_length=50,blank = True,null = True,verbose_name="Páginas",help_text='Cantidad de páginas del Libro')
    anho = models.PositiveIntegerField(blank = True,null = True,verbose_name="Año",help_text='Año de publicación del Libro')
    mes = models.CharField(max_length=20,blank = True,null = True,help_text='Mes de publicación del Libro')

    def save(self):
        self.tipo = "libro"
        self.creado_por = get_request().user.username
        for field in self._meta.fields:
            if field.name == 'imagen':
                field.upload_to = 'media/Publicaciones/Libros/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
            if field.name == 'archivo':
                field.upload_to = 'media/Publicaciones/Libros/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
        super(Libros, self).save()

    def getDate(self):
        if self.anho:
            if self.mes:
                return unicode(self.mes) + ' / ' + unicode(self.anho)
            else:
                return unicode(self.anho)
        return unicode('')

    def __unicode__(self):
        return  force_unicode(self.publicacion)
    

class Papers(Publicaciones):
    paper = models.CharField(max_length=300,verbose_name="* Paper",help_text='Título del Paper')
    tema = models.TextField(help_text='Tema del Paper',verbose_name="* Tema")
    resumen = models.TextField(blank = True,null = True,help_text='Abstract del Paper')
    congreso = models.CharField(max_length=300,blank = True,null = True,help_text='Congreso en el cual fue presentado el Paper')
    revista = models.CharField(max_length=200,blank = True,null = True,help_text='Revista en la cual fue publicado el Paper')
    volumen = models.CharField(max_length=20,blank = True,null = True,help_text="Volumen del Paper")
    edicion = models.CharField(max_length=100,blank = True,null = True,verbose_name="Edición")
    ISBN = models.CharField(max_length=20,blank = True,null = True,help_text='ISBN del Paper')
    anho = models.PositiveIntegerField(blank = True,null = True,verbose_name="Año",help_text='Año de publicación del Paper')
    mes = models.CharField(max_length=20,blank = True,null = True,help_text='Mes de publicación del Paper')
    
    def save(self):
        self.tipo = "paper"
        self.creado_por = get_request().user.username
        for field in self._meta.fields:
            if field.name == 'imagen':
                field.upload_to = 'media/Publicaciones/Papers/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
            if field.name == 'archivo':
                field.upload_to = 'media/Publicaciones/Papers/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
        super(Papers, self).save()

    def getDate(self):
        if self.anho:
            if self.mes:
                return unicode(self.mes) + ' / ' + unicode(self.anho)
            else:
                return unicode(self.anho)
        return unicode('')

    def __unicode__(self):
        return  force_unicode(self.publicacion)


class ReportesTecnicos(Publicaciones):
    reporte = models.CharField(max_length=200,verbose_name="* Reporte",help_text='Título del Reporte')
    fecha = models.DateField(blank = True,null = True,help_text='Fecha de emisión del Reporte')
    
    def save(self):
        self.tipo = "reporte"
        self.creado_por = get_request().user.username
        for field in self._meta.fields:
            if field.name == 'imagen':
                field.upload_to = 'media/Publicaciones/ReportesTecnicos/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
            if field.name == 'archivo':
                field.upload_to = 'media/Publicaciones/ReportesTecnicos/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
        super(ReportesTecnicos, self).save()

    def getDate(self):
        if self.fecha:
            return unicode(self.fecha.strftime("%d/%m/%Y"))
        return unicode('')

    def __unicode__(self):
        return  force_unicode(self.publicacion)


TIPO_CHOICES = ( 
    ('P','Pregrado'),
    ('G','Grado'),
    ('O','Postgrado'),
)

class Tesis(Publicaciones):
    titulo_tesis = models.CharField(max_length=300,verbose_name="* Tesis",help_text='Título de la Tesis')
    tipo_tesis = models.CharField(max_length=1, choices=TIPO_CHOICES,default='G',verbose_name="* Tipo de Tesis")
    institucion = models.CharField(max_length=200,verbose_name="* Institución",help_text='Institución en la cual se realizó la Tesis')
    carrera = models.CharField(max_length=100,help_text='Carrera en la cual se realizó la Tesis',verbose_name="* Carrera")
    #tutores = models.ManyToManyField(User,blank = True,null = True,verbose_name="Tutores")
    tutores_externos = models.CharField(max_length=200,blank = True,null = True,verbose_name="Tutores")
    fecha = models.DateField(blank = True,null = True,help_text='Fecha de la Tesis')
    
    def save(self):
        self.tipo = "tesis"
        self.creado_por = get_request().user.username
        for field in self._meta.fields:
            if field.name == 'imagen':
                field.upload_to = 'media/Publicaciones/Tesis/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
            if field.name == 'archivo':
                field.upload_to = 'media/Publicaciones/Tesis/%s' % unicodedata.normalize('NFKD', self.publicacion).encode('ascii','ignore').replace(" ", "")
        super(Tesis, self).save()

    def getDate(self):
        if self.fecha:
            return unicode(self.fecha.strftime("%d/%m/%Y"))
        return unicode('')

    def __unicode__(self):
        return  force_unicode(self.publicacion)
